// 导入路径辅助模块，避免重复引用
const pathImport = require('../helpers/path_import.js');
const { pageHelper, cloudHelper } = pathImport;;
const ProjectBiz = require('../../../comm/biz/project_biz.js');
const PassportBiz = require('../../../../../config/passport_biz_config.js');
const { createStoreBindings } = require('../../../../../miniprogram_npm/mobx-miniprogram-bindings/index');
const { contactStore } = require('../../../config/store_config.js');

Page({
    /**
     * 页面的初始数据
     */
    data: {
        isLoad: false,
        isLogin: false,

        // 通讯录数据
        contactList: [],
        
        // 搜索相关
        search: '',
        searchResult: [],
        isSearch: false,

        // 字母索引
        letterList: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#'],
        activeLetter: '',
        scrollIntoView: '',
        
        // 右侧索引条高度
        scrollHeight: 0,
        // 部门筛选
        departments: [],
        currentDept: '',
        totalCount: 0
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: async function (options) {
        ProjectBiz.initPage(this);
        
        // 创建MobX绑定
        this.storeBindings = createStoreBindings(this, {
            store: contactStore,
            fields: [
                'contactList', 
                'departments', 
                'totalCount', 
                'currentDept', 
                'activeLetter',
                'loading',
                'search',
                'searchResult',
                'isSearch'
            ],
            actions: [
                'loadContactList',
                'setCurrentDept',
                'setActiveLetter',
                'search',
                'clearSearch'
            ]
        });
        
        // 检查登录状态
        try {
            let result = await PassportBiz.loginSilence(this);
            if (!result) {
                this.setData({
                    isLoad: true,
                    isLogin: false
                });
                return;
            }

            // 使用新推荐的API获取窗口信息
            let scrollHeight;
            try {
                const windowInfo = wx.getWindowInfo();
                scrollHeight = windowInfo.windowHeight - 100; // 减去顶部搜索栏的高度
            } catch (error) {
                console.warn('获取窗口信息失败，使用默认值', error);
                scrollHeight = 600; // 使用默认高度
            }

            this.setData({
                isLoad: true,
                isLogin: true,
                scrollHeight
            });

            await this.loadContactList();

        } catch (err) {
            console.error('登录检查失败：', err);
            this.setData({
                isLoad: true,
                isLogin: false
            });
        }
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: async function () {
        // 检查登录状态
        if (!PassportBiz.isLogin()) {
            this.setData({
                isLoad: true,
                isLogin: false
            });
            return;
        }

        if (this.data.isLogin) {
            await this.loadContactList();
        }
    },

    /**
     * 下拉刷新
     */
    onPullDownRefresh: async function () {
        await this.loadContactList();
        wx.stopPullDownRefresh();
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {
        // 销毁MobX绑定
        this.storeBindings.destroyStoreBindings();
    },

    /**
     * 获取姓名首字母
     */
    _getFirstLetter: function(name) {
        if (!name) return '#';
        
        // 为中文名获取拼音首字母
        const firstChar = name.charAt(0);
        
        // 这里简化处理，实际应该使用拼音转换库
        // 此处假设已有英文字母或数字，直接返回大写
        if (/[a-zA-Z]/.test(firstChar)) {
            return firstChar.toUpperCase();
        } else if (/[0-9]/.test(firstChar)) {
            return '#';
        } else {
            // 中文字符，简单返回#
            // 在实际应用中应使用拼音库转换
            return '#';
        }
    },

    /**
     * 搜索联系人
     */
    onSearch: function(e) {
        const searchText = e.detail.value.trim();
        this.search(searchText);
    },

    /**
     * 清除搜索
     */
    onClearSearch: function() {
        this.clearSearch();
    },

    /**
     * 点击字母索引
     */
    onLetterTap: function(e) {
        const letter = e.currentTarget.dataset.letter;
        this.setActiveLetter(letter);
        this.setData({
            scrollIntoView: 'letter-' + letter
        });
    },

    /**
     * 选择部门
     */
    onDeptChange: function(e) {
        const dept = e.currentTarget.dataset.dept;
        this.setCurrentDept(dept);
    },

    /**
     * 拨打电话
     */
    onCallPhone: function(e) {
        const phone = e.currentTarget.dataset.phone;
        if (!phone) {
            pageHelper.showModal('该联系人没有电话号码');
            return;
        }
        
        wx.makePhoneCall({
            phoneNumber: phone,
            fail: function() {
                pageHelper.showModal('拨打电话失败，请重试');
            }
        });
    },

    /**
     * 复制电话到剪贴板
     */
    onCopyPhone: function(e) {
        const phone = e.currentTarget.dataset.phone;
        if (!phone) {
            pageHelper.showModal('该联系人没有电话号码');
            return;
        }
        
        wx.setClipboardData({
            data: phone,
            success: function() {
                pageHelper.showSuccToast('已复制到剪贴板');
            }
        });
    },

    /**
     * 跳转到联系人详情页
     */
    onViewContact: function(e) {
        const id = e.currentTarget.dataset.id;
        if (!id) return;
        
        wx.navigateTo({
            url: '../detail/contact_detail?id=' + id
        , timeout: 10000, fail: function(err) {
        // 处理超时错误
        if (err.errMsg && err.errMsg.includes("timeout")) {
          wx.showToast({
            title: "页面加载超时，请重试",
            icon: "none"
          });
          return;
        }
        
        // 处理其他错误
        console.error("页面跳转失败:", err);
        wx.showToast({
          title: "页面跳转失败",
          icon: "none"
        });
      }});
    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {
        return {
            title: '企业通讯录',
            path: '/projects/oa/pages/contact/index/contact_index'
        }
    }
}) 